//package com.manage.system.web.config;
//
//import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
//import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
//import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
//import com.manage.common.core.dto.token.User;
//import com.manage.common.core.utils.ContextHolderUtils;
//import net.sf.jsqlparser.expression.Expression;
//import net.sf.jsqlparser.expression.StringValue;
//import org.mybatis.spring.annotation.MapperScan;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * @author zhangqing
// */
////@Configuration
////@MapperScan("com.handle.system.svc.mapper")
//public class MybatisPlusConfig {
//
//    /**
//     * 新多租户插件配置,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存万一出现问题
//     */
//    @Bean
//    public MybatisPlusInterceptor mybatisPlusInterceptor() {
//        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//        interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
//            @Override
//            public Expression getTenantId() {
//                User currentUser = ContextHolderUtils.getCurrentUser();
//                return new StringValue(currentUser.getTenantCode());
//            }
//
//            @Override
//            public String getTenantIdColumn() {
//                // 对应数据库租户ID的列名，是数据库列名，不是实体类
//                return "tenant_code";
//            }
//
//            /**
//             * 根据表名判断是否忽略拼接多租户条件
//             * <p>
//             * 默认都要进行解析并拼接多租户条件
//             *
//             * @param tableName 表名
//             * @return 是否忽略, true:表示忽略，false:需要解析并拼接多租户条件
//             */
//            @Override
//            public boolean ignoreTable(String tableName) {
//                User currentUser = ContextHolderUtils.getCurrentUser();
//                if(ContextHolderUtils.isSuperAdmin(currentUser)){
//                    return true;
//                }
//                List<String> list = new ArrayList<>();
//                list.add("sys_user");
//                list.add("sys_dept");
//                list.add("sys_role");
//                list.add("sys_tenant");
//                return !list.contains(tableName);
//            }
//        }));
//        // 如果用了分页插件注意先 add TenantLineInnerInterceptor 再 add PaginationInnerInterceptor
//        // 用了分页插件必须设置 MybatisConfiguration#useDeprecatedExecutor = false
////        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
//        return interceptor;
//    }
//}